#ifndef _INHERIT_SOCKET_H
#define _INHERIT_SOCKET_H

#include "socket.h"

//class inherit_socket;

// typedef bool (inherit_socket::*handler)(connection_p con_p,char * body,unsigned short body_len);    //用于绑定成员函数指针

class inherit_socket:public _socket{
public:
    typedef bool (inherit_socket::*handler)(connection_p con_p,char * original_msg,char * body,unsigned short body_len);    //用于绑定成员函数指针
    //这个类的存在就是为了自定义业务处理
    inherit_socket();
    void thread_for_deal_message(char *message) override;    //业务处理---传过来的消息组成为：消息头，包头，包体（可以采用protobuf进行约定）
    void add_function_to_handlerMap(int type,handler handler_ptr);      // 增加业务处理函数到这里
    void init_handler_map();        //初始化全部的业务处理函数

    //一些业务处理函数
    bool pong(connection_p con_p,char * original_msg,char * body,unsigned short body_len);    //心跳包
    //上传文件的线程体以及相关的变量新创建一个类来表示
    bool file_upload(connection_p con_p,char * original_msg,char * body,unsigned short body_len);    //文件上传 这里的包体通过protobuf的反序列化后进行处理
    bool file_judge_is_continue_to_upload(connection_p con_p,char * original_msg,char * body,unsigned short body_len);
    //文件的下载
    bool file_judge_is_continue_to_download(connection_p con_p,char * original_msg,char * body,unsigned short body_len);
    bool response_of_is_continue_to_download(connection_p con_p,char * original_msg,char * body,unsigned short body_len);

    

private:
    std::map<int,handler> handler_map;  //便于能够快速找到对应的业务处理函数
};


#endif